#include "Parametro.h"

/*
 * @resume: construtor da classe Parametro
 */
Parametro::Parametro() {

}

/*
 * @resume: construtor da classe Parametro
 * @param: string identificador, int categoria, int nivel,
 * 		   string procedimentoPai, int linha, int dislocate, string type,
 * 		   bool passageWay) : IdentificadorGenerico(identificador,
 *         categoria, nivel, procedimentoPai,linha)
 */
Parametro::Parametro(string identificador, int categoria, int nivel,
		string procedimentoPai, int linha, int dislocate, string type,
		bool passageWay) :
	IdentificadorGenerico(identificador, categoria, nivel, procedimentoPai,
			linha) {

	this->dislocateParametro = dislocate;
	this->typeParametro = type;
	this->passageWayParametro = passageWay;
}

/*
 * @resume: destrutor da classe Parametro
 */
Parametro::~Parametro() {

}

/*
 * @resume: metodo utilizado para setar o deslocamento do parametro
 * @param: int dislocateParametro
 */
void Parametro::setDislocateParametro(int dislocateParametro) {
	this->dislocateParametro = dislocateParametro;
}

/*
 * @resume: metodo utilizado para setar o tipo do parametro
 * @param: string typeParametro
 */
void Parametro::setTypeParametro(string typeParametro) {
	this->typeParametro = typeParametro;
}

/*
 * @resume: metodo utilizado para setar o tipo de passagem do parametro
 * @param: bool passageWayParametro
 */
void Parametro::setPassageWayParametro(bool passageWayParametro) {
	this->passageWayParametro = passageWayParametro;
}

/*
 * @resume: metodo utilizado para obeter o deslocamento do parametro
 * @return: int dislocateParametro
 */
int Parametro::getDislocateParametro() {
	return (this->dislocateParametro);
}

/*
 * @resume: metodo utilizado para obeter o tipo do parametro
 * @return: string typeParametro
 */
string Parametro::getTypeParametro() {
	return (this->typeParametro);
}

/*
 * @resume: metodo utilizado para obeter o tipo de passagem do parametro
 * @return: bool passageWayParametro
 */
bool Parametro::getPassageWayParametro() {
	return (this->passageWayParametro);
}

/*
 * @resume: metodo utilizado para imprimir o paramtro no arquivo de saida (hashTable.txt)
 * @return: Arquivo& fileOut
 */
void Parametro::show(Arquivo& fileOut) {
	fileOut.write(" | Categoria: ParametroFormal \n");
	fileOut.write(" | Nivel: " + IntToString(getNivelIdentificador())+ "\n");
	fileOut.write(" | Procedimento: " + getProcedimentoPaiIdentificador()+ "\n");
	fileOut.write(" | Tipo: " + getTypeParametro()+ "\n");
	fileOut.write(" | Deslocamento: " + IntToString(getDislocateParametro())
			+ "\n");
	fileOut.write(" | Passagem: ");
	if (this->getPassageWayParametro()) {
		fileOut.write(" Referencia \n");
	} else {
		fileOut.write(" Valor \n");
	}
	fileOut.write(" | Linha: " + IntToString(getLinhaIdentificador())+ "\n");
	fileOut.write(" | Rotulo: " + getIdentificador()+ "\n");
}
